<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var obj = {
            id: 1,
            pname: '小米',
            price: 1999
        };
        // 1. 以前添加和修改原有的属性
        // 添加属性和属性值
        // obj.num = 1000;
        // 修改属性和属性值
        // obj.price = 999;
        // console.log(obj);

        // 2. Object.defineProperty() 定义新属性或修改原有的属性
        // Object.defineProperty()第三个参数是以对象的形式书写的
        Object.defineProperty(obj, "num", {
            // (1) value 用于设置目标属性的值
            value: 1000
        });
        console.log(obj);
        Object.defineProperty(obj, "id", {
            // (2) writable 用于控制目标属性是否可以被重写
            // 如果值为 false，不允许修改这个属性值，默认值也是false
            writable: false
        });
        obj.id = 2;
        console.log(obj);
        Object.defineProperty(obj, 'address', {
            value: "中国山东蓝翔技校xx单元",
            writable: false,
            // (3) enumerable用于控制目标属性是否可以被枚举
            // 默认为false，不允许遍历，true则可以遍历
            enumerable: false,
            // (4) configurable 用于控制目标属性是否可以被删除或再次修改第三个参数里面的特性
            // 默认为false，不允许删除和修改，true则可以删除和修改
            configurable: false
        });
        console.log(obj);
        // 遍历一下obj里面的属性
        console.log(Object.keys(obj)); //["id", "pname", "price"]，因为在设置num时没有写enumerable:true，所以默认为enumerable:false，不可以遍历
        // delete 运算符可以删除对象属性
        delete obj.address;
        delete obj.pname;
        console.log(obj);
    </script>
</body>

</html>